package leetCode707;

import leetCode203.main;

public class MyLinkedList {
    // 节点
    class ListNode {
        int val;
        ListNode next;
        ListNode(int val) {
            this.val=val;
        }
    }

    //size存储链表元素的个数
    private int size;

    //注意这里记录的是虚拟头结点
    private ListNode head;

    // 初始化节点，创建一个虚拟节点
    public MyLinkedList() {
        this.size = 0;
        this.head = new ListNode(0);
    }

    // 获取对应索引的元素
    public int get(int index) {
        //如果index非法，返回-1
        if (index < 0 || index >= size) {
            return -1;
        }
        ListNode cur = head;
        //第0个节点是虚拟头节点，所以查找第 index+1 个节点
        for (int i = 0; i <= index; i++) {
            cur = cur.next;
        }
        return cur.val;
    }

    // 往头添加元素
    public void addAtHead(int val) {
        // 真实的当前链表
        ListNode next = head.next;
        // 创建一个新的链表
        ListNode add = new ListNode(val);
        size++;
        add.next = next;
        head.next = add;
    }

    // 往最后添加元素
    public void addAtTail(int val) {
        // 获取最后一个元素
        ListNode oldLast = head;

        for (int i = 0; i <= size; i++) {
            oldLast = oldLast.next;
        }

        // 添加节点
        oldLast.next = new ListNode(val);
        size++;
    }

    // 在某个节点添加元素
    public void addAtIndex(int index, int val) {

    }

    // 删除对应索引的元素
    public void deleteAtIndex(int index) {

    }
}
